                             - 285 -

                   4.    .

          - 
 .        -
  ""     " ",   
     :    -
  .       -   
 , ,     -
    .       
             
.        -
 ,        -  ,
     ,    .
            -
,    ,       -
,       (ASCII 13),     
 (ASCII  10).       ,    ,
    ,      
          
    .     
  ,   .     
   .      -
 ,             . 
     "128"       
,             
       -  -
 ,        -
  .     -
    .
   ,         
 / ,     ,  
     . , 10
      20-  .  
 ,    ,   -
  ,          
(      , -
       ,    ).
       ,  
       .   
            ,
             -
/ .        
.          
 .
           
  .    -    
    ,     .
    10  ,     -
   50- ,       -
  491-   (..    #490,  
   0).        -
  .      , 
     ,      
.  ,     ,   .
    2, 3  5 .    
    10  .      
     .       -
      ,  
    / ,    -

                             - 286 -

 .          
     74,   73      
(   73         
   ,      , 
     ).     -
       .   
   ,     
  .
              
 ,       ( 
     ).   -
      ,   MS DOS  
     .     
       
  .
          . 
  n-  ,    ,  -
         .   
      -
         
 ,              .
      ,   
     .   -
              
        
     ;     -
  .      ,
         -
    .
          
/    .        
            
,           
 .       
    ,          
COMMAND.COM. ,     , 
       [5.1.1]   -
  [5.2.1]        -
  .

                             - 287 -

   5.4.1     765   -
    8237.

      765   NEC   
          ,
     .    , -
    ,     
.   ,     ,
     -
  .     ,  DOS 
BIOS   ,  ,    
  ,         
     ,    -
    .
              
.     ROM-BIOS,      
   MS DOS,    -
       ,     
,         . 
,      ,  -
 ROM-BIOS       
    .     
   8272A  Intel,  
  NEC.      -
,   ,       -
    IBM PC   .      8272A
             
 (Microsystem Components Handbook).
       15 ,    
   :      
  .           
    ,   ,   
   .       
     [5.2.1],         
    [5.1.1]    
  .    6 :

1.     ,    .
2.      , 
   .
3.   DMA     .
4.        ,
,    .
5.      .
6.  .

            /.   
     ,    ,  
         .     
 :

   3F2H            
   3F4H           
   3F5H           

                .
   :

                             - 288 -

    1-0      ,  00 = A
                                      01 = B
                                      10 = C
                                      11 = D
          2     0 =   
          3     1 =   FDC   DMA
        7-4     1 =    D-A ( 4 = A)

    ,     
  .     
A,      00011100.    -
    A,    2,
        A.  -
  2  ,        -
    ,  ,    
 .
   ""      
  .      
    .    -
   ,      -
            
.      ,    
 2     ,      
     ,    ,    
       ,   
.      
      ,    -
      .
   ,           -  
 .         
      ,      
  .        
         ,   
   .     -
             
.  ,     ,
       .
             :
 ,        .  
        .  -
         
.          
   .  ,     ,
      .    -
,         -
         .
              
     .   -
  IBM PC     15 .   
    ,      .
      5-       
        .
         -
 (0-3)         (0  1)  
2,      .   -
        ,  -
      .      

                             - 289 -

         , 
    .      
  ,         .  
   ,   , -
   .
               
  ,    0  128, 1  256,  2
 512  3  1024.   ,    MS DOS 
  512 .      (EOT),
       ;  -
   9    360K.  ,   
  (GPL,  2AH)     (DTL,  FFH).
     IBM PC   ,   
    ,    ,  -
   .  MS DOS   -
    ,        ,
   (disk base).    1EH -
   .         , 
        ,    
 3.      -
   ,     .
    X   ,   -
,   H -  ,   DD -  -
.

      #                  0
                                            15,  1

            1        00001111           1FH
                 2                  00H
                        XXXXXHDD

           1        01100110           66H
          2                  00H
                        XXXXXHDD
                 3                        0FH
                 4                        00H
                 5                        01H
                 6                      02H
                 7                        09H
                 8                         1AH
                 9                         FFH

           1        01000101           45H
        2-9       ,     

       ,       
          .   7  6
    .   
 :

 3-0    1 =  D-A   
       4    1 =     /
       5    1 =      DMA
       6    1 =       
                
            0 =    
       7    1 =        

                             - 290 -

         ,    6
  ,      .  
   ,   .   
   ,   7   
 ;       ,   
   1,      .
,         -
    .      
,    .
      ,    
 6,   .      
       ,  
     .    -
,     BIOS   7 
      BIOS,     
0040:003E.     . 
     ,   7   , 
       .
           -
     8237.        
        ,  , 
   .    ,  PCjr,  
 DMA,         -
,           .   
       ,   
        ,       
  .   ,   PCjr  
       .   -
   ,        
    ,     1
   8253      ,   
  .     IBM PC   -
 DMA,      .
   IBM PC  XT  4-  DMA 8237. 
0    ""  (memory refresh);   -
       .   
     ,       
 .  2      ,  
 ,   1  3,  (  -
)     .    ,  -
-          
0,      IBM PC  XT.  AT 
7         DMA   -
  MOVS,     -
.
          -
 ,            
 .      46H    4AH
-  .          
  0BH  0CH.
       8237    .   
16- ,   ,   
  .        ,  
  .       2     
   05H;      -
 ,    .

                             - 291 -

          ,  -
      .       
20- , , ,   3000:ABCD  
3ABCD.   16     ,  
 2    04H.     .
  4       ,      2
   81H.       , 
     4  .       
 ,          DS   
   20- .   
     .  ,  DS 
1F00H,     - 2000H,     
 1F00 + 2000 = 21000H.
          ,  2  
  0AH,    2.    
DMA      ,   
       . 
      8237:

1.     .
2.   20-   ,    -
 ,          2.
3.        ( 1)  -
   2.
4.  .

        ,     
      ,      .   
  .  :

       #       

            

            1          0
                  2          1
                  3          2
                  4         
                  5         
                  6         
                  7            (0-3)

          1-7         ,    

     :

  0:
    7-6   00 =  
              01 =  ,   
              10 =  
              11 = , ..   
          5   1 =   
          4   1 =  
          3   1 =   
          2     
        1-0     

                             - 292 -

  1:
    7   1 =     
       6     ( 0)
       5   1 =   
       4   1 =  
       3     ( 0)
       2   1 =      
       1   1 =    -   
       0   1 =     

  2:
    7     ( 0)
       6   1 =     
       5   1 =     
       4   1 =    
       3   1 =    
       2   1 =     
       1   1 =  
       0   1 =   

            -
 ,       . 
      ,     
:

  3:
    7   1 =  
       6   1 =    
       5   1 =  
       4   1 =    
       3   1 =  
       2     
     1-0     

      ,  -
    "    " (Sense Drive Sta-
tus).         4,  
        1  0,    
  2.          
 3.  ,      ,  
   DOS  BIOS,   
      BIOS,      0040:0042.
         
0040:0041,    :

                 

        80H               
        40H             
        20H             
        10H               ( CRC)
        09H                64K
        08H            DMA
        04H              
        02H              
        01H               

                             - 293 -

           , 
      12,  1,  0 -
 A  512-    .    -
     .   -
  IBM PC  XT.     -
    PCjr  AT,      -
.   AT      ,    
  ,      JMP  SHORT
$+2     OUT,   
    .        
,        
  .

;---  
BUFFER         DB 512 DUP(?)
STATUS_BUFFER  DB 7 DUP(?)

SECTOR_READ    PROC    ;    
;--- 
   STI              ;   
   MOV  DX,3F2H     ;   
   MOV  AL,28       ;  2, 3  4
   OUT  DX,AL       ; 
;---     ( 1/2 .)
   MOV  CX,3500     ;   ( IBM PC  XT)
MOTOR_DELAY:  LOOP MOTOR_DELAY  ; 1/2 
;---  
   MOV  AH,15       ; 
   CALL OUT_FDC     ;  
   MOV  AH,0        ; 
   CALL OUT_FDC     ;  
   MOV  AH,12       ; 
   CALL OUT_FDC     ;  
   CALL WAIT_INTERRUPT  ;   
;---   (25 .)
   MOV  CX,1750     ;   ( IBM PC  XT)
WAIT_SETTLE:  LOOP WAIT_SETTLE   ; 25 .
;---   DMA
   MOV  AL,46H      ;    
   OUT  12,AL       ;    
   OUT  11,AL       ;
;---  
   MOV  AX,OFFSET BUFFER   ;    DS
   MOV  BX,DS       ; DS  BX
   MOV  CL,4        ;   
   ROL  BX,CL       ;  4 
   MOV  DL,BL       ; DL  BL
   AND  DL,0FH      ;    DL
   AND  BL,0F0H     ;    BX
   ADD  AX,BX       ;
   JNC  NO_CARRY    ;   ,  #   DL
   INC  DL          ; DL,   
NO_CARRY:   OUT  4,AL  ;   
   MOV  AL,AH       ;  
   OUT  4,AL        ;   
   MOV  AL,DL       ;  
   OUT  81H,AL      ;  

                             - 294 -

;--- 
   MOV  AX,511      ; 
   OUT  5,AL        ;  
   MOV  AL,AH       ;  
   OUT  5,AL        ;  
   MOV  AL,2        ;   2
   OUT  10,AL       ;DMA  
;---    
   MOV  AL,1EH      ; ,   
   MOV  AH,35H      ; 
   INT  21H         ; 
;---  
   MOV  AH,66H      ;   
   CALL OUT_FDC     ;  
   MOV  AH,0        ;   
   CALL OUT_FDC     ;  
   MOV  AH,12       ; 
   CALL OUT_FDC     ;  
   MOV  AH,0        ; 
   CALL OUT_FDC     ;  
   MOV  AH,1        ; 
   CALL OUT_FDC     ;  
   MOV  AH,ES:[BX]+3  ;  
   CALL OUT_FDC     ;  
   MOV  AH,ES:[BX]+4  ;  
   CALL OUT_FDC     ;  
   MOV  AH,ES:[BX]+5  ; 
   CALL OUT_FDC     ;  
   MOV  AH,ES:[BX]+6  ; 
   CALL OUT_FDC     ;  
   CALL WAIT_INTERRUPT  ;   
;---  
   MOV  CX,7        ; 7  
   LEA  BX,STATUS_BUFFER  ;   
NEXT:   CALL IN_FDC  ; 
   MOV  [BX],AL     ;  
   INC  BX          ;    
   LOOP NEXT        ; 
;--- 
   MOV  DX,3F2H     ;   
   MOV  AL,12       ;  3  4
   OUT  DX,AL       ;  
   RET              ; 
SECTOR_READ      ENDP

WAIT_INTERRUPT   PROC      ;   
;---   6    BIOS
   MOV  AX,40H      ;   BIOS
   MOV  ES,AX       ;  ES
   MOV  BX,3EH      ;   
AGAIN:   MOV  DL,ES:[BX]  ; 
   TEST DL,80H      ;  7
   JZ   AGAIN       ;     
   AND  DL,01111111B   ;  7
   MOV  ES:[BX],DL  ;  
   RET
WAIT_INTERRUPT   ENDP

                             - 295 -

OUT_FDC          PROC      ;   AH FDC
   MOV  DX,3F4H     ;   
KEEP_TRYING:  IN   AL,DX   ; 
   TEST AL,128      ; 7 ?
   JZ   KEEP_TRYING ; ,   
   INC  DX          ;   
   MOV  AL,AH       ;   AH
   OUT  DX,AL       ; 
   RET
OUT_FDC          ENDP

IN_FDC           PROC  ;   FDC  AL
   MOV  DX,3F4H     ;   
ONCE_AGAIN:  IN   AL,DX   ; 
   TEST AL,128      ; 7 ?
   JZ   KEEP_TRYING ; ,   
   INC  DX          ;   
   IN   AL,DX       ;    
   RET
IN_FDC           ENDP

                             - 296 -

   5.4.2 /  .

             -
         -
  ,         
 .           ,
        -
   .     
   ,    -
    .
    DOS   BIOS        
  .      -.
 IBM PC, XT  PCjr  BIOS     
 (0  1),   (0-39)     (1-8).
-          8 
     .    AT 
     8,  9    15,     
  39  79.   DOS     -
,        .   
    ,     
 .       
   .
          0    0
 1        1    0,  
   0  1  .. (  
     .)   
    ,     
       .
   360K     (   )
      18.      
 ,         .   
      3  2     
3*18   0-2  9   0  3  ,
     3  1.   
64.     1   .  . 5-4
    DOS  BIOS.

    .

          . 
      .  
      .   
 9    3    1   360K.
      ,     
&H1000,    ,    
 &H2000 (,     
,   16).         -
           
   &H25  &H26.    .

100 DEFINT A-Z       '   
110 DATA &H55, &H8B, &HEC, &H1E, &H8B, &H76, &H0C, &H8B
120 DATA &H04, &H8B, &H76, &H0A, &H8B, &H14, &H8B, &H76
130 DATA &H08, &H8B, &H0C, &H8B, &H76, &H06, &H8A, &H1C
140 DATA &H8E, &HD8, &H8B, &HC3, &H8B, &H00, &H00, &HCD
150 DATA &H25, &H59, &H1F, &H5D, &HCA, &H08, &H00

                             - 297 -

160 DEF SEG = &H1000     '    &H10000
170 FOR N = 0 TO 38      '   
180 READ Q: POKE N,Q     '      
190 NEXT                 ' 
200 READSECTOR = 0       ' ,    
210 BUFFER = &H2000      '     &H20000
220 LOGICALNUMBER = 62   '    62
230 NSECTORS = 9         '  
240 DRIVE = 0            '  (0 = A)
250 CALL READSECTOR (BUFFER, LOGICALSECTORS, NSECTORS, DRIVE)
260 '   ,    2000:0000

    .

   BIOS   2  13H    
 3  13H   .     DL
       0  3,  0 = A, 1 = B 
..,  DH  -   (), 0-1.  CH    
   0  39,   CL  -      0  8.  AL
  ,   .  
      ,     
  .  ES:BX      
,          -
.     AL      -
 .     ,     
  .     1,  AH    
 ,   [5.4.8].

;---  
BUFFER     DB   4000 DUP(?)  ; 

;--- 
   MOV  AX,SEG BUFFER       ;ES:BX    
   MOV  ES,AX               ;
   MOV  BX,OFFSET BUFFER    ;
   MOV  DL,0                ; 
   MOV  DH,0                ; 
   MOV  CH,0                ; 
   MOV  CL,1                ; 
   MOV  AL,1                ;   
   MOV  AH,2                ;  
   INT  13H                 ;

    DOS 25H  26H     -
 , .     -
   DX,  DS:BX    . CX 
      ,  AL -    ,
 0 = A, 1 = B    ..       , 
.       , -
  .         
     (    
 CX).

;---  
BUFFER      DB  DUP 5000(?)   ; 

                             - 298 -

;--- 
   PUSH DS                 ; 
   MOV  AX,SEG BUFFER      ;DS:BX    
   MOV  DS,AX              ;
   MOV  BX,OFFSET BUFFER   ;
   MOV  DX,63              ;  
   MOV  CX,9               ;  
   MOV  AL,0               ; A
   INT  25H                ;  
   POP  CX                 ;   
   POP  DS                 ; 
   JNC  NO_ERROR           ;  ,   
   CMP  AH,3               ;  
    .
    .
NO_ERROR:                  ; 

         1,    
   AH  AL       -
.  AH = 4,     ,   AH = 2, 
  .   AH = 3,    
 ,   .    AH -
   .

    .

           -
           .
      ,     
   [5.4.1].

                             - 299 -

   5.4.3    .

             
        .  
  ""      
,        /  .  
  ,          
,     .      
,       , -
   /     ,
   .     
 .       MS DOS, -
        .     
    DOS       
       ,       .
 ,     ,  DOS     
  ,      .
   ,       -
       ASCII 26 (Ctrl-Z).
    .   DOS   -
  ;          
   .       
 ASCII 26.

    .

         ,  
     OPEN.  
            . -
   :

   100 OPEN "MYFILE" FOR OUTPUT AS #1



   100 OPEN "O", #1, "MYFILE"

     "O"   (output).    #1
   ,         
      ,   WRITE #1  
INPUT #1.           MYFILE 
    .     
   ,   OPEN   .    
 ,    , ..   
          . 
      , 
   ,   , 
   OPEN      OPEN "MYFILE" FOR APPEND AS
#1.     . [5.3.3].
           PRINT#  WRI-
TE#.    :

   100 PRINT #1, S$



   100 WRITE #1, X

                             - 300 -

#1       ( -
),    OPEN.      
   ,    
,          . -
          
,         .   ,
232  2-     ,   X =
232,   PRINT #1, X     , 
 ASCII   2, 3  2.
    PRINT#  WRITE#      -
   .      
 .     -
   ,  WRITE#   -
    .    ,   
      100 PRINT #1, A$, Z, B$  
100 WRITE #1, A$, Z, B$.      /-
               
 (,         
  ).           
?       PRINT#,  . 
      .   
  WRITE#,       -
   ,      .  ,  
    ,      -
   ,     WRITE#.
        .       
,            , 
           
PRINT#  WRITE#.      PRINT#    -
    / ,  WRITE#   -
   ,  -      
  (     ).   
,   ,      , 
WRITE#  ,     -
           -
. , , ,      -
  ,         
  ,         -
.   PRINT #1, A$, B$  B$  A$,   
  PRINT #1, A$; B$ - ;     
.   PRINT#      PRINT #1
USING...,        -
 PRINT USING     .
    ,      PRINT#,
     .    
         
  .    , -
        PRINT# 
WRITE#     ,    
   ,          
.
            ,   -
 ,       . 
CLOSE,     , CLOSE #1 -  
 #1  CLOSE #1, #3 -        #1   #3.  
     ,     
.  WRITE#   PRINT#      -

                             - 301 -

,      ,    -
 .      
  CLOSE.         
 .  :

100 OPEN "A:NEWSEQ" FOR OUTPUT AS #1  ' 
110 A$ = "aaaaa"                      '  
120 B$ = "bbbbb"                      '
130 C$ = "ccccc"                      '
140 WRITE #1, A$, B$, C$              ' 
150 CLOSE                             ' 

    .

   MS DOS        -
  ,     .   FCB
         
 .    ,   -
,        ,  
      .    , , -
   ,    . 
      ,    
       .  , 
    ,    "-
" .         , 
        .

 FCB:
    15H  21H     -
 .       
   ,    [5.3.5].      
,          16H, 
""  ,     .     
    0FH,       
 ,      ,  . 
 ,          ,  -
   .
         ,      DS:DX  
 FCB      15H      
  .         ,
     ,    
14     FCB,       128  .
   ,      512 , 
  ,        -
 ,        ; 
          
   .       -
     .     15H,
AL  0,   , 1 -     2 - 
     .
          5   256
.        .   
   ,   WORKAREA.  -
  DTA      ,
       DTA    -
,     256    .  ,  
          
[1.3.1],             
   .

                             - 302 -

;---  
WORKAREA     DB  2000 DUP (?)   ; 
FCB          DB  1,'FILENAMEEXT',25 DUP (0)

;---DTA     
   LEA  DX,WORKAREA   ;DS:DX   DTA
   MOV  DI,DX         ; 
   MOV  AH,1AH        ;  DTA
   INT  21H           ; DTA
;--- 
   MOV  AH,16H        ; 
   LEA  DX,FCB        ;DS:DX   FCB
   INT  21H           ; 
;---  
   LEA  BX,FCB        ;BX   FCB
   MOV  AX,256        ;  256 
   MOV  [BX]+14,AX    ;    
;---   
   MOV  CX,5          ; 
NEXT_REC:  MOV  AH,15H   ; 
   LEA  DX,FCB        ;  FCB
   INT  21H           ; 
   CMP  AL,2          ;  
   JE   CONTINUE      ;  
   CMP  AL,1          ;
   JE   DISK_FULL     ;
;--- ,  DTA
   ADD  DI,256        ;  1 
   MOV  DX,DI         ;DS:DX    DTA
   MOV  AH,1AH        ;  DTA
   INT  21H           ;  
   LOOP NEXT_REC:     ;   

;---,  
   LEA  DX,FCB        ;DS:DX   FCB
   MOV  AH,10H        ;  
   INT  21H           ; 

            -
          .  
    ,    
 ,       
  .      ,  ,
  DTA,         
 ,      .   
      ,     
    .       
0FH.

  :
            -
     .    
        ,    
            
   .  , ,  ,  
   2000     ,  
         1000 .

                             - 303 -

            (
3DH),     ,  ,   ,    
         ,   
 2000 ,        
 .    ,     
      3CH  21H
[5.3.2].       ,    
,          .  
        
 , 3DH  21H [5.3.3].
        .  ,
    3CH,    
 ,     .  
   BX,      CX.    
DS:DX             40H
 21H.   ,    ,  
   AX  5,     -
  6 -    .    , AX 
      ;   -
     ,   .  
    ,     
      ,      
   .        
  [5.1.2].  :

;---  
PATH         DB    'B:FILENAME.EXT',0   ;  
DATA_BUFFER  DB    2000 DUP (?)

;---     ""
   LEA  DX,PATH          ;DS:DX     
   MOV  CX,0             ;  ( )
   MOV  AH,3CH           ; 
   INT  21H              ; 
   JC   OPEN_ERROR       ;  
   MOV  HANDLE,AX        ;  
;---   1000 
   MOV  AH,40H           ; 
   MOV  BX,HANDLE        ;   BX
   MOV  CX,1000          ; ,   
   LEA  DX,DATA_BUFFER   ;DS:DX    
   INT  21H              ; 
   JC   OUTPUT_ERROR     ;  
   CMP  CX,2000          ;  
   JNE  FULL_DISK        ;

             
    3DH    21H,  1  AL, 
      2,     
  .      ,   
    .    -
       ,     
 .     42H  21H.
   2    AL,      
  ,       BX.  CX:DX   
      ,       
 ,    .  -
   .    

                             - 304 -

    ,    AX  1,    
  AL  ,  6  -     
.            
       :

;---  
PATH          DB  'B:FILENAME.EXT',0   ;  
DATA_BUFFER   DB  1000 DUP(?)

;--- 
   LEA  DX,PATH       ;DS:DX   
   MOV  AL,1          ;    
   MOV  AH,3DH        ; 
   INT  21H           ; 
   JC   OPEN_ERROR    ;  
   MOV  HANDLE,AX     ;  
;---     
   MOV  BX,AX         ;   BX
   MOV  CX,0          ;CX:DX    
   MOV  DX,0          ;
   MOV  AL,2          ;   
   MOV  AH,42H        ;  
   INT  21H           ; 
   JC   POINTER_ERROR ;  
;---   300 
   MOV  AH,40H        ; 
   MOV  BX,HANDLE     ;   BX
   MOV  CX,300        ;  
   LEA  DX,DATA_BUFFER   ;DS:DX    
   INT  21H           ; 
   JC   OUTPUT_ERROR  ;  
   CMP  CX,300        ;  
   JNE  FULL_DISK     ;

                             - 305 -

   5.4.4    .

           -
  ,   ,    .   
         
  .       
,    .       -
          -
,   .        
 ,    .

    .

        ,   ,
     ,    ,
   ,         -
   .  INPUT# 
   ,      ,      
 / .   LINE INPUT#  
    CR/LF,        
    ,   .   
    .
         INPUT#,  
,     [5.3.3] (, OPEN  "A:NEWSEQ"  FOR
INPUT AS #1).           1,  
INPUT  #1,  X$, Y$, Z$        
   .     ,
,  INPUT  #1, X, Y, Z ,    
    .       
     ,     
     .     
       :

100 DIM ITEM$(40)       '    40 
110 FOR N = 0 TO 39     '  
120 INPUT #1, ITEM$(N)  '     
130 NEXT                '

   n-     
        .   
 ,      ,   
      .
    LINE INPUT#     
INPUT#,    ,       
       .   
    254       
     .      /
,    ,   ,  
 LINE INPUT#.     
   .
     EOF ( )     -
 ,          .  
 -1,     0 -   . -
   ,       ; ,
      #2,  X = EOF(2).     
     :

                             - 306 -

100 OPEN "TEXT.AAA" FOR INPUT AS #2   ' 
110 DIM TEXT$(500)                    '  500 
120 LINECOUNT = 0                     ' 
130 LINE INPUT #2, TEXT$(LINECOUNT)   ' 
140 IF EOF(2) THEN 170                '   
150 LINECOUNT = LINECOUNT + 1         ' 
160 GOTO 130                          '  
170 ...                               ' 

    INPUT$        
 .          -
   .        30
    #1 : S$ = INPUT$(30,#1).     
     ,       
  254,        
,    . INPUT$   -
      .  ,  -
      200  
    ,      
 ,   :

100 OPEN "A:NEWFILE" FOR INPUT AS #1   ' 
110 CLS: DEF SEG = &HB000              '  
120 FOR N = 0 TO 9                     ' 10 
130 S$ = INPUT$(20,#1)                 ' 20 
140 FOR M = 1 TO 20                    '  
150 POKE N*160 + M*2, ASC(MID$(S$,M,1) '    
160 NEXT M       '   
170 NEXT N       '   

    .

          MS DOS   -
      ,   -
  .         -
     . 
     ,  
 ,    .

 FCB:
    14H  21H   . 
            , 
  [5.3.5].       0FH -
 21H [5.3.3].   DS:DX        FCB,
    14H        
 .         14
 FCB.      ,   ,    
  DOS          ,
 128.

                             - 307 -

               ,
    DTA.   DTA   
 ,       DTA
      ,   -
.       DTA    
,      ,   
      ,   
   ,     .
          (DB,   1FH)  
   (DW,  0CH)   ,  -
  ,         (-
       FCB).    
          1, 
   128     .  
 AL  0,     .  -
   AL   1,   14H 
    3 -    .
            -
       .     
  256 .       
,       ,    DTA  
 ,           -
 .

;--- FCB   
FCB          DB  0,'OLDDATA DAT', 25 DUP(0)
DATA_AREA    DB  512 DUP (?)    ;  DTA

;--- DTA    
   LEA  DX,DATA_AREA      ;DS:DX   DTA
   MOV  DI,DX             ; 
   MOV  AH,1AH            ;  DTA
   INT  21H               ; DTA
;--- 
   LEA  DX,FCB            ;DS:DX   FCB
   MOV  AH,0FH            ;  
   INT  21H               ; 
   CMP  AL,0              ;  
   JNE  OPEN_ERROR        ;
;---   256 
   LEA  BX,FCB            ;DS:DX   FCB
   MOV  AX,256            ; 
   MOV  DS:[BX]+14,AX     ;    
;--- 
   MOV  CX,2              ;  
NEXT_REC:   MOV  AH,14H   ;  
   LEA  DX,FCB            ;DS:DX   FCB
   INT  21H               ;  
   CMP  AL,0              ;  ?
   JE   CONTINUE          ;
   CMP  AL,2              ;  
   JE   READ_ERROR        ;
    .
    .

                             - 308 -

CONTINUE:  ADD  DI,256    ; 
   MOV  DX,DI             ;DX    DTA
   MOV  AH,1AH            ;  DTA
   INT  21H               ; DTA
   LOOP NEXT_REC          ;    
;---,  
   LEA  DX,FCB            ;DS:DX   FCB
   MOV  AH,10H            ;  
   INT  21H               ; 
   CMP  AL,0FFH           ;  
   JE   CLOSE_ERROR       ;

  :
    3FH  21H      -
.         
   ,    .
       3DH  21H   0 
AL,      ,    2 -   
    .     
     .   -
          
         ,  -
      ,    
  . ,     
  -         -
.
         ,  ,
, 512 ,       ,  -
    .     -
          ,     
.       ,  
  ,      ,  
      . 
     ,    -
   ,     .
       ,     
 .             .
    AL  2    42H,    ,  
     .   CX  DX   0,
           
 ,        .  
DX:AX     ,   -
  , ..,      ,   . 
        , 
   ;       ,  -
  ,    AL   0.     
 42H  ,    , 
 AX  1,    ,  6 -   -
   .
        .   
  BX,      CX   .
  AX      .
 AX  ,    .    
  ,  AX   5 -   -
    6 -     .    
          .  -
      ,    
    .      
 ,    ,  -
  [1.3.1].

                             - 309 -

;---  
PATH        DB   'A:FILENAME.EXT'0   ;   
DATA_BUFFER DB   1000 DUP (?)        ; 
HANDLE      DW   ?                   ; 
FILESIZE    DW   ?                   ; 

;--- 
   LEA  DX,PATH            ;DS:DX   
   MOV  AL,0               ;   
   MOV  AH,3DH             ;  
   INT  21H                ; 
   JC   OPEN_ERROR         ;  
   MOV  HANDLE,AX          ;  
;---     
   MOV  AH,42H             ;  
   MOV  AL,2               ;   
   MOV  BX,HANDLE          ; 
   MOV  CX,0               ;  
   MOV  DX,0               ;
   INT  21H                ; 
   JC   POINTER_ERROR1     ; 
   MOV  FILESIZE,AX        ;  ( 64K)
;---   
   MOV  AH,42H             ; 
   MOV  AL,0               ;   
   MOV  CX,0               ;  
   MOV  DX,0               ;
   INT  21H                ; 
   JC   POINTER_ERROR2     ; 

                             - 310 -

;---  
   MOV  AH,3FH             ;   
   MOV  BX,HANDLE          ; 
   MOV  CX,FILESIZE        ;  
   LEA  DX,DATA_BUFFER     ;DS:DX   
   INT  21H                ; 
   JC   READ_ERROR         ; 

;---,  
   MOV  BX,HANDLE          ; 
   MOV  AH,3EH             ;  
   INT  21H                ; 
   JC   CLOSE_ERROR        ; 

                             - 311 -

   5.4.5     .

            -
 ,       . 
   ,      
  ,     -
    (   n-  
        ,  
 ).       
.           
,         -
    ,   .

    .

    [5.3.3]          
.      ,   -
               , 
      .   OPEN  
,    .  , OPEN "R", 1, "NEW-
DATA", 20    NEWDATA    20 
(      #1).
       ,        
     FIELD.  FIELD
        .
,     20       
FIELD 1, 14 AS LASTNAME$, 2 AS  DEPOSIT$,  4 AS ACCTNUM$.   
     1 ,      FIELD
     ,     #1.
        ,     
   FIELD.   RSET  LSET  
 ,     (RSET)   (LSET)  
    .   ,  ,
   "SMITH"  14-    LASTNA-
ME$,   RSET LASTNAME$  = "SMITH",   
N$    "SMITH",  RSET LASTNAME$ = N$. -
 RSET     LSET.    
    ,    
14 .     RSET      
    ,     -
 LSET,     .
   ,        FIELD 
  .       -
   -    -  . -
       , -
         ,    
      .  
     ,   
            ;  
     .    
    ,   -    
     -         . 
            
  .            
    MKI$, MKS$   MKD$,    
  -    ,     
  , .      -

                             - 312 -

   RSET   LSET,  , RSET = ACCTNUM$ =
MKI$(X),   X -  ,   ACCTNUM$  -
     FIELD.
          RSET  LSET, 
       PUT#. PUT #1, 245 -
      245,      #1.
    ,     
       ,     -
  (   1).    -
,         .  , 
           PUT,  
 ,    ,    
  ,         , -
      .  LOC -
         .   
   #3,   X = LOC(3).
    LOF ( )     . 
  ,     ,  
    .   1    
 ,    ,     
  .        #2,    
  32 ,        
RECORDNUM = LOF(2)/32 + 1.
            
 24 ,      . -
         ,  
   ,        .  
120    . ,   
          -
 PUT.       -
,     .

100 OPEN "R", 1, "A:NEWDATA.DAT", 24  ' 
110 FIELD 1, 18 AS LASTNAME$, 2 AS AGE$, 4 AS WEIGHT
120 R = LOF(1)/24 + 1         '   + 1
130 CLS                       ' 
140 INPUT "Enter name:",N$    '  ()
150 INPUT "Enter age:",A%     '  ()
160 INPUT "Enter weight:",W!  '  ()
170 RSET LASTNAME$ = N$       '   
180 RSET AGE$ = MKI$(A%)      '   
190 RSET WEIGHT$ = MKS$(W!)   '   
200 PUT #1, R                 ' 
210 R = R + 1                 ' 
220 PRINT: PRINT "Do another (y/n)?"  ' 
230 C$ = INKEY$: IF C$ = "" THEN 220  ' 
240 IF C$ = "y" THEN CLS: GOTO 130    ' ,   
250 CLOSE                     '  

    .

           MS DOS   -
     ,    -
  ,        .  
       ,   
   ,   .

                             - 313 -

   :
           0FH  
DS:DX    .         
            
FCB.     22H  21H,   
  DTA   ,    FCB.  -
       ,   
   .       -
 ,     22H  .
        22H AL   00,  
 .       1,   
    2 -       ,
    (..    , -
  ,  ,    FCB).

;---  
FCB       DB   1, 'NEWDATA    ', 25 DUP (0)
DTA       DB   256 DUP (?)

;---     FCB
   MOV  AH,0FH          ; 
   LEA  DX,FCB          ;DS:DX   FCB
   MOV  BX,DX           ;   FCB
   INT  21H             ; 
   MOV  AX,256          ; 
   MOV  [BX]+14,AX      ;    
   MOV  AX,233          ; 
   MOV  [BX]+33,AX      ;    
   MOV  AX,0            ;    
   MOV  [BX]+35,AX      ;
;---   DTA  
   MOV  AH,22H          ;     
   LEA  DX,FCB          ;DS:DX   FCB
   INT  21H             ; 
   CMP  AL,0            ;  
   JNE  WRITE_ERROR     ;

;---,  
   LEA  DX,FCB          ;DS:DX   FCB
   MOV  AH,10H          ;  
   INT  21H             ; 
   CMP  AL,0FFH         ;  
   JE   CLOSE_ERROR     ;

            -
,           . MS DOS
          
 FCB,       .  -
 28H  21H.    DS:DX    -
 FCB,             
      .    
      .   
  (   )   ,    CX  
          (    "" 
  128 ,      -
  -       , 
  ).

                             - 314 -

    CX     .  AL 
 0,       , 1 -   -
     ,        
.     22H    -
   ,       -
  FCB,         ,  
  .   ,       
  CX = 0,          
   ,      -
,         -
.

  :
          -
          .
      ,    -
  ,       .
      42H -
 21H.       BX,      CX:DX
(CX     ).     AL
   0  2.  AL  =  0,   
  CX:DX    ;  AL =  1,
      CX:DX  -
  ,   AL = 2,      -
 CX:DX       (..     
 ).       -
.    DX:AX     -
 (   DX).     , 
 .    AX   1,  
   AL  6 -     .
             
       40H  21H,
       .   
 BX   ,  CX  -  ,  
.    AX     -
 .            CX, 
   (. [5.1.4]).   ,  
     .       AX 
  5       6 -     
 .
              -
,   DTA     .      
      .   ,
        -
,         -
         .

;---  
HANDLE        DW    ?           ; 
FILEPATH      DB    'A:NEWDATA',0   ;   
REC_BUFFER    DB    30 DUP (?)  ;  

;--- 
   MOV  AH,3DH               ; 
   MOV  AL,1                 ;   
   LEA  DX,FILEPATH          ;DS:DX   
   INT  21H                  ; 
   JC   OPEN_ERROR           ;  
   MOV  HANDLE,AX            ;  

                             - 315 -

;---      
   MOV  AX,30                ;  30 
   MOV  CX,54                ;  #54 (55- )
   MUL  CX                   ;     DX:AX
   MOV  CX,DX                ;    DX
   MOV  DX,AX                ;    CX
   MOV  AL,0                 ;   
   MOV  AH,42H               ;  
   MOV  BX,HANDLE            ; 
   INT  21H                  ; 
   JC   POINTER_ERROR        ;  
;---    
   MOV  AH,40H               ; 
   MOV  BX,HANDLE            ; 
   MOV  CX,30                ; 
   LEA  DX,REC_BUFFER        ;DS:DX   
   INT  21H                  ; 
   JC   WRITE_ERROR          ;  

       FCB     -
         -
.       
,   ,    .

                             - 316 -

   5.4.6     .

            
   . MS DOS      ,
        .    
         , -
     .    -
  ,    .  -
       [5.4.5]  -
,        -
.

    .

               
  ,       ,  
    .     
GET#      .  GET #1,23 
   #23  ,    #1.   
 ,      FIELD, 
    .  , 
 FIELD    FIELD  1,  20  AS X$, 2 AS Y$,  
   GET 1,23  X$   -
  20-   23,    Y$ - 
10- .  ,    RSET  LSET  
  .
         , ,       
            MKI$, MKS$ 
MKD$.       ,    
        ,  -
       CVI, CVS  CVD.     Y$
  ,      
  Y%  = CVI(Y$),    Y%    
,            -
        .     
   ,  ,   
   0  65535,     ASCII.
        ,    
[5.4.5],       :

100 OPEN "A:NEWDATA" AS #1 LEN = 24    ' 
110 FIELD 1, 18 AS LASTNAME$, 2 AS AGE$, 4 AS WEIGHT$
120 CLS: INPUT "What is the record number";R   ' 
130 IF R*24 > LOF(1) THEN BEEP: PRINT"No such record": GOTO 120
140 GET #1,R                     '   
150 PRINT LASTNAME$, CVI(AGE$), CVS(WEIGHT$)   ' 
160 PRINT: PRINT "Do another (y/n)?"    ' ?
170 C$ = INKEY$: IF C$ = "" THEN 170    ' 
180 IF C$ = "y" OR C$ = "Y" THEN 120    ',  
190 CLOSE                               '  

    .

    FCB          -
   .   ,   
   ,       -
.     .

                             - 317 -

 FCB:
    21H  21H      
.   , 27H,    -
.      ,    [5.3.5]  
  [5.3.3].      FCB ,   
    (DW   14)   
  (DD      33).    DS:DX  
   FCB,     21H   
     ,     DTA.
        ,      AL   0.
    ,     ,  -
          ,  
     ,       .
         ,     
,   AL   1  3.      
3,            
.     1,      -
.
            DTA:

;---  
FCB         DB    1,'OLDDATA    ', 25 DUP (0)

;---     FCB
   MOV  AH,0FH           ; 
   LEA  DX,FCB           ;DS:DX   FCB
   MOV  BX,DX            ;  FCB
   INT  21H              ; 
   MOV  AX,55            ;  55 
   MOV  [BX]+14,AX       ;    
   MOV  AX,22            ;   
   MOV  [BX]+33,AX       ;    
   MOV  AX,0             ;    
   MOV  [BX]+35,AX       ;
;---     DTA
   MOV  AH,21H           ;     
   LEA  DX,FCB           ;DS:DX   FCB
   INT  21H              ; ,    DTA
   CMP  AL,0             ;  
   JNE  READ_ERROR       ;
;---,  
   MOV  AH,10            ;   
   LEA  DX,FCB           ;DS:DX   FCB
   INT  21H              ; 

               
    27H  21H.  
     ,    21H,  -
 ,   CX     -
     .   CX  
     .      AL
  ,    21H.    
  21H  FCB,       -
  (   ,    
)  ,      
     .
   ,       ,     
 ,            FCB
      .   

                             - 318 -

       ,   -
     ,     24H
 21H,         .   
   ,  ,  DS:DX 
  FCB.         
 ,     .

  :
       ,     -
        .    
        
,         ,   
  .  DS:DX    , 
   ,      
3FH  21H.    CX    ,
 BX -  .

;---  
HANDLE       DB    ?
FILEPATH     DB    'A:OLDDATA',0
REC_BUFFER   DB    30 DUP(?)

;--- 
   MOV  AH,3DH          ; 
   MOV  AL,0            ;   
   LEA  DX,FILEPATH     ;DS:DX     
   INT  21H             ; 
   JC   OPEN_ERROR      ;  
   MOV  HANDLE,AX       ;  
;---      
   MOV  AX,30           ; 
   MOV  CX,54           ;  #54 (55- )
   MUL  CX              ;   DX:AX
   MOV  CX,DX           ;     DX
   MOV  DX,AX           ;     CX
   MOV  AL,0            ;    
   MOV  AH,42H          ;  
   MOV  BX,HANDLE       ; 
   INT  21H             ; 
   JC   POINTER_ERROR   ; 
;---    
   MOV  AH,3FH          ; 
   MOV  BX,HANDLE       ; 
   MOV  CX,30           ; 
   LEA  DX,REC_BUFFER   ;DS:DX     
   INT  21H             ; 
   JC   READ_ERROR      ; 

;---,  
   MOV  BX,HANDLE       ; 
   MOV  AH,3EH          ;  
   INT  21H             ; 
   JC   CLOSE_ERROR     ;  

                             - 319 -

   5.4.7     /.

   MS DOS          
    .     ,
     ,    
  .  ,   ,    -
 .         VERIFY = ON 
  CONFIG.SYS,         
 .   ,    
.        -
.          DOS
     .  -
   ,      
 ,    [7.2.5].

    .

     2EH   21H       .
  AL 1 -       0 -  -
. DL     0.     -
.      .

;--- 
   MOV  AL,1     ; 
   MOV  DL,0     ;  
   MOV  AH,2EH   ; 
   INT  21H      ; 

          -
 54H  21H.     .  
AL = 1,     AL = 0,  .

                             - 320 -

   5.4.8       .

       ,    -
  .     
  ,      .  
   ,       -
         -
.
        ,     
 (soft)    (hard).     -
      :    
        ,
      .    ,   
       -
    ,      
     .    ,
      .

    .

     [7.2.5]       -
.   ON ERROR  GOSUB       
       .
        ,
        :

   52      Bad file number.  (  .)   -
              ,        (#1,
           #2  ..)
   53      File  not  found.  (  .)   
             LOAD, KILL, NAME, FILES  OPEN.
   54      Bad file mode.  (  .)  -
                ,    ,  
              ,  ,    -
            ,   .
   55      File already open.  (  .)  
           ,   ,    (KILL) ,
              .
   58      File  already exists.  (  .)  
              (    NAME)  , 
              .
   61      Disk full.  ( .) .   
           [5.1.4],    .
   62      Input past end.   (      .) 
                  -
           ,   .       -
             EOF,    [5.4.4].
   63      Bad  record number.  (  .)  
                   , 
              .
   64      Bad  file  name.  (   .)  
            KILL, NAME  FILES.
   67      Too many files.   (    .)  
                  .  -
                 ,   
                 ,      
                   
           .

                             - 321 -

   70      Disk is write-protected. (   .)
   71      Disk is not ready. (  .)  ,
               .
   72      Disk media error. (  .)   , 
                  ,  
                .
   74      Specified wrong disk  in   RENAME  operation.  (
               RENAME.)
   75      Path/file  access  error.  (     .)
                  ,  .
                ,    .
                      
            .     OPEN, NAME,
           MKDIR, CHDIR  RMDIR.
   76      Path not found.  (  .)   
               .     
           OPEN, MKDIR, CHDIR  RMDIR.

        ,   -
   .    , 
   ,   RESUME   
   ,    .   RESUME 
  ,     
     ,  
,         (,     
   ).     -
      ,   
     :

100 ON ERROR GOSUB 5000         '
 .
 .
600 '''
 .
 .
5000 '''
5010 IF ERR = 61 PRINT "Disk full": GOTO 5100
5020 IF ERR = 70 PRINT "Disk is write protected": GOTO 5100
 .
 .
5100 PRINT "Correct the problem, then strike any key"
5110 C$ = INKEY$: IF C$ = "" THEN 5110
5120 RESUME 600

    .

    1  13H     AL ,  
 .    :
    0-1   01 =  , ,   3 = 1, 
                        64K
              10 =    
              11 =       
          2   1  =    
          3   1  =  DMA (   ),
                   ,   0 = 1,    -
                      64K
          4   1  =   ,  
          5   1  =  
          6   1  =   
          7   1  =     (-)

                             - 322 -

          MS DOS   
    ,     -
  .         
   .     ,  
     AX.   ,   -
 :

   1        
   2        
   3        
   4           
   5        ( )
   6        
  15        
  16         
  17         
  18         (      -
           )

      ""  .  
    .     -
  .       -
,    .   [7.2.5] 
     .
    MS DOS 3.0    .     
    59H  21H,   -
   .     .
 [7.2.5].